home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 7
/
Apprentice-Release7.iso
/
Source Code
/
Pascal
/
Snippets
/
PNL Libraries
/
MySaveableWindow.p
< prev
next >
Wrap
Text File
|
1996-05-29
|
3KB
|
135 lines
unit MySaveableWindow;
interface
uses
OOMainLoop;
type
SaveableWindowObject = object(DObject)
spec: FSSpec;
named: boolean;
has_been_modified: boolean; { Either set this, or override Modified }
function Modified: boolean;
procedure Create (id: integer);
override;
procedure DoClose;
override;
procedure BaseNew;
procedure BaseOpen (fs: FSSpec);
procedure BaseSave;
procedure SaveAs (fs: FSSpec);
procedure DoOpen;
procedure DoSave;
procedure DoSaveAs;
end;
implementation
uses
MyUtils, BaseGlobals, MyTypes, MyUtilities, MyStandardFile;
function SaveableWindowObject.Modified: boolean;
begin
Modified := has_been_modified;
end;
procedure SaveableWindowObject.Create (id: integer);
var
tempname: Str63;
begin
inherited Create(id);
spec.vRefNum := 1;
spec.parID := -1;
spec.name := GetGlobalString(untitled_name);
named := false;
has_been_modified := false;
tempname := spec.name;
SetWTitle(window, tempname);
end;
procedure SaveableWindowObject.BaseNew;
begin
end;
procedure SaveableWindowObject.BaseOpen (fs: FSSpec);
begin
end;
procedure SaveableWindowObject.BaseSave;
begin
end;
procedure SaveableWindowObject.BaseOpenAs;
var
reply: MySFReply;
fs: FSSpec;
begin
GetFile1('TEXT', reply);
with reply do
if Rgood then begin
fs.vRefNum := RVRefNum;
fs.parID := RdirID;
fs.name := Rfname;
BaseOpen(fs);
end
else
Destroy;
end;
procedure SaveableWindowObject.SaveAs (fs: FSSpec);
begin
spec := fs;
named := true;
SetWTitle(window, fs.name);
BaseSave;
end;
procedure SaveableWindowObject.DoClose;
var
sc: SCType;
begin
sc := SCDiscard;
if Modified then begin
sc := SaveChanges;
if sc = SCSave then begin
DoSave;
if Modified then
sc := SCCancel; { if still modified, then the user didn't save, so they must have canceled }
end;
end;
if sc <> SCCancel then
Destroy;
end;
procedure SaveableWindowObject.DoSave;
begin
if not named then begin
DoSaveAs;
end
else begin
BaseSave;
end;
end;
procedure SaveableWindowObject.DoSaveAs;
var
reply: MySFReply;
tempname: Str63;
fs: FSSpec;
begin
if named then
SetSFFile(spec.vRefNum, spec.parID);
tempname := spec.name;
PutFile('Save file as:', tempname, reply);
with reply do begin
if Rgood then begin
fs.vRefNum := RVRefNum;
fs.parID := RdirID;
fs.name := Rfname;
SaveAs(fs);
end;
end;
end;
end.